﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionePolveriLib.BL.Reports;
using GestionePolveriLib.Facades;
using GestionePolveriLib.BL;
using DevExpress.XtraEditors.Controls;

namespace GestionePolveri2.QuickReportInfo
{
    public partial class FilterEditor : Form
    {
        private QuickReportInfoItem m_quickReportInfoItem = null;

        public QuickReportInfoItem QuickReportInfoItem
        {
            get { return m_quickReportInfoItem; }
            set 
            { 
                m_quickReportInfoItem = value;

                LoadImpianti(m_quickReportInfoItem.Impianti);
                LoadFamiglie(m_quickReportInfoItem.Famiglie);
                LoadApplicazione2(m_quickReportInfoItem.Applicazione);

                this.txtDescrizione.Text = m_quickReportInfoItem.Descrizione;
                               
                //this.chkCmbImpianti.Text = m_quickReportInfoItem.Impianti;
                if (m_quickReportInfoItem.DateFrom != null)
                {
                    this.dtpFrom.Value = m_quickReportInfoItem.DateFrom.GetValueOrDefault();
                }

                if (m_quickReportInfoItem.DateTo != null)
                {
                    this.dtpTo.Value = m_quickReportInfoItem.DateTo.GetValueOrDefault();
                }
            }
        }

        public FilterEditor()
        {
            InitializeComponent();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            QuickReportInfoItem item = new QuickReportInfoItem();
            item.ID = m_quickReportInfoItem.ID;

            if (this.chkPeriodo.Checked)
            {
                if (this.dtpTo.Value < this.dtpFrom.Value)
                {
                    MessageBox.Show("Intervallo di date non corretto...", "Gestione Polveri");
                    return;
                }
                else
                {
                    item.DateFrom = new DateTime(this.dtpFrom.Value.Year, this.dtpFrom.Value.Month, this.dtpFrom.Value.Day, 0, 0, 0);
                    item.DateTo = new DateTime(this.dtpTo.Value.Year, this.dtpTo.Value.Month, this.dtpTo.Value.Day, 23, 59, 0);
                }
            }

            if (string.IsNullOrWhiteSpace(this.txtDescrizione.Text))
            {
                MessageBox.Show("Inserire la descrizione...", "Gestione Polveri");
                return;
            }
            else
            {
                item.Descrizione = this.txtDescrizione.Text;
            }

            if (((string)this.chkCmbApplicazione.Properties.GetCheckedItems() != null) &&
                (this.chkCmbApplicazione.Properties.GetCheckedItems().ToString() != string.Empty))
            {
                item.Applicazione = (string)this.chkCmbApplicazione.Properties.GetCheckedItems().ToString();

                item.Applicazione = item.Applicazione.Replace(" ", "");
            }

            if ((this.chkCmbFamiglia.Properties.GetCheckedItems() != null) &&
                (this.chkCmbFamiglia.Properties.GetCheckedItems().ToString() != string.Empty))
            {
                //item.Famiglie = this.chkCmbFamiglia.Properties.GetCheckedItems().ToString();

                string[] ids = this.chkCmbFamiglia.Properties.GetCheckedItems().ToString().Split(new char[] { ',' });

                FamigliaColoriFacade impf = new FamigliaColoriFacade();
                foreach (string s in ids)
                {
                    int id = int.Parse(s.Trim());

                    ((List<FamigliaColore>)item.Famiglie).Add(impf.Get(id));
                }
            }

            if ((this.chkCmbImpianti.Properties.GetCheckedItems() != null) &&
                (this.chkCmbImpianti.Properties.GetCheckedItems().ToString() != string.Empty))
            {
                string[] ids = this.chkCmbImpianti.Properties.GetCheckedItems().ToString().Split(new char[] { ',' });

                ImpiantoFacade impf = new ImpiantoFacade();
                foreach (string s in ids)
                {
                    int id = int.Parse(s.Trim());

                    ((List<Impianto>)item.Impianti).Add(impf.GetImpianto(id));
                }
            }

            if ((!string.IsNullOrWhiteSpace(item.Applicazione)) ||
                (item.Famiglie.Count() != 0) ||
                (item.Impianti.Count() != 0))
            {
                //QuickReportInfoFacade qrif = new QuickReportInfoFacade();

                //qrif.Modify(item);

                m_quickReportInfoItem = item;
                this.Close();
            }
            else
            {
                MessageBox.Show("Devi selezionare almeno un filtro tra Applicazione, Famiglia o Impianto !",
                                "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            
        }

        private void LoadApplicazione2(string applicazione)
        {
            chkCmbApplicazione.Properties.Items.Clear();

            chkCmbApplicazione.Properties.Items.Add("b", "Base");
            chkCmbApplicazione.Properties.Items.Add("v", "Venatura");
            //chkCmbApplicazione.Properties.Items.Add("bv", "Base e Venatura");

            CheckedListBoxItemCollection items = chkCmbApplicazione.Properties.GetItems();

            string[] applicazioni = applicazione.Split(new char[] { ',' });

            foreach (CheckedListBoxItem item in items)
            {
                foreach (string s in applicazioni)
                {
                    if (item.Value.Equals(s.Trim()))
                    {
                        item.CheckState = CheckState.Checked;
                        break;
                    }
                }
            }
        }

        private void LoadFamiglie(IEnumerable<FamigliaColore> famiglie)
        {
            FamigliaColoriFacade pf = new FamigliaColoriFacade();

            pf.RunAsync(() => pf.GetAll(), (result) =>
            {
                if (result != null)
                {
                    this.chkCmbFamiglia.Properties.Items.Clear();

                    this.chkCmbFamiglia.Properties.DisplayMember = "Descrizione";
                    this.chkCmbFamiglia.Properties.ValueMember = "ID";
                    this.chkCmbFamiglia.Properties.DataSource = result;

                    CheckedListBoxItemCollection items = chkCmbFamiglia.Properties.GetItems();

                    foreach (CheckedListBoxItem item in items)
                    {
                        foreach (FamigliaColore fc in famiglie)
                        {
                            if (item.Description == fc.Descrizione)
                            {
                                item.CheckState = CheckState.Checked;
                                break;
                            }
                        }
                    }
                }
            });
        }

        private void LoadImpianti(IEnumerable<Impianto> impianti)
        {
            ImpiantoFacade pf = new ImpiantoFacade();

            pf.RunAsync(() => pf.GetImpianti2(), (result) =>
            {
                if (result != null)
                {
                    this.chkCmbImpianti.Properties.DisplayMember = "Nome";
                    this.chkCmbImpianti.Properties.ValueMember = "ID";
                    this.chkCmbImpianti.Properties.DataSource = result;

                    CheckedListBoxItemCollection items = chkCmbImpianti.Properties.GetItems();

                    foreach (CheckedListBoxItem item in items)
                    {
                        foreach (Impianto imp in impianti)
                        {
                            if (item.Description == imp.Nome)
                            {
                                item.CheckState = CheckState.Checked;
                                break;
                            }
                        }
                    }
                }
            });
        }
    }
}
